/*  
 *  Copyright 2006 Paul Jack.
 *
 *  This file is part of the Dex compiler suite. 
 *  
 *  Dex is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License as published by the
 *  Free Software Foundation; either version 2 of the License, or (at your
 *  option) any later version.
 *  
 *  Dex is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 *  Public License for more details.
 *  
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 */
package dex.compiler.model.statement;

import dex.compiler.model.expression.ExpressionVisitor;
import dex.compiler.model.type.TypeVisitor;


/**
 * Visitor for statements.
 */
public interface StatementVisitor extends ExpressionVisitor, TypeVisitor {


	/**
	 * Visits an assignment statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitAssignment(Assignment s);
	
	
	/**
	 * Visits a block before visiting its internal statements. 
	 * 
	 * @param s  The statement to visit
	 */
	void enterBlock(Block s);
	
	
	/**
	 * Visits a block after visiting its internal statements. 
	 * 
	 * @param s  The statement to visit
	 */
	void exitBlock(Block s);
	
	
	/**
	 * Visits a call statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitCallStatement(CallStatement s);
	
	
	/**
	 * Visits a catch block.
	 * 
	 * @param s  The statement to visit
	 */
	void visitCatchBlock(CatchBlock s);
	
	
	/**
	 * Visits a comment.
	 * 
	 * @param s  The statement to visit
	 */
	void visitComment(Comment s);
	
	
	/**
	 * Visits a declaration.
	 * 
	 * @param s  The statement to visit
	 */
	void visitDeclaration(Declaration s);
	
	
	/**
	 * Visits a decrement statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitDecrementStatement(DecrementStatement s);
	
	
	/**
	 * Visits a for statement before visiting its initializer, condition, 
	 * mutator or body.
	 * 
	 * @param s  The statement to visit
	 */
	void enterForStatement(ForStatement s);

	
	/**
	 * Visits a for statement after visiting its initializer, condition,
	 * mutator and body.
	 * 
	 * @param s  The statement to visit
	 */
	void exitForStatement(ForStatement s);

	
	/**
	 * Visits an if statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitIfStatement(IfStatement s);
	
	
	/**
	 * Visits an increment statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitIncrementStatement(IncrementStatement s);
	
	
	/**
	 * Visits a return statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitReturnStatement(ReturnStatement s);
	
	
	/**
	 * Visits a switch case.
	 * 
	 * @param s  The statement to visit
	 */
	void visitSwitchCase(SwitchCase s);
	
	
	/**
	 * Visits a switch statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitSwitchStatement(SwitchStatement s);
	
	
	/**
	 * Visits a throw statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitThrowStatement(ThrowStatement s);
	
	
	/**
	 * Visits a try statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitTryStatement(TryStatement s);
	
	
	/**
	 * Visits a while statement.
	 * 
	 * @param s  The statement to visit
	 */
	void visitWhileStatement(WhileStatement s);

}
